/*
 * ipprocess.h
 *
 *  Created on: 07/07/2011
 *      Author: george
 */

#ifndef IPPROCESS_H_
#define IPPROCESS_H_
#include <exception>
#include "types.h"
#include "defines.h"

class NoTcpHeader: public std::exception{
public:
	virtual const char* what(){
		return "TCP Header não encontrado ou corrompido";
	}
};


class NoUdpHeader: public std::exception{
public:
	virtual const char* what(){
		return "UDP Header não encontrado ou corrompido";
	}
};

class NoIcmpHeader: public std::exception{
public:
	virtual const char* what(){
		return "ICMP Header não encontrado ou corrompido";
	}
};


class ipProcess {
public:
	t_header_t header;
    u_int8_t protocol_type;

	ipProcess(const struct pcap_pkthdr *h,const ip_hdr_t *ip);

	int getTransportProtocol();

	void processTcp(const ip_hdr_t *ip);
	void processUdp(const ip_hdr_t *ip);
	void processICMP(const ip_hdr_t *ip);


	bool isUDP();
	bool isTCP();
	bool isICMP();
	bool isICMPInformation();
	bool isICMPError();

	tcp_hdr_t  *getTcp();
	udp_hdr_t  *getUdp();
	icmp_hdr_t *getICMP();


};

#endif /* IPPROCESS_H_ */
